home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat05 / castet / castet.c < prev    next >
C/C++ Source or Header  |  1992-01-05  |  45KB  |  1,002 lines

  1. /**************************************************************************/
  2. /*                                                                        */
  3. /*        CasTet.c                                                        */
  4. /*                                                                        */
  5. /* Ce programme ouvre une fenètre et dessine les                          */
  6. /* pièces d'un casse-tete.......................                          */
  7. /*                                                                        */
  8. /* Compilé avec Lattice 4.0                                               */
  9. /*                                                                        */
  10. /**************************************************************************/
  11.  
  12. #include <intuition/intuition.h>
  13. #include <intuition/intuitionbase.h>
  14. #include <graphics/gfxbase.h>
  15. #include <graphics/gfx.h>
  16. #include <graphics/gfxmacros.h>
  17. #include <string.h>
  18. #include <exec/types.h>
  19.  
  20. #define RPORT Fenetre->RPort
  21. #define LARGEUR 218
  22. #define HAUTEUR 171
  23.  
  24. struct GfxBase *GfxBase;
  25. extern struct IntuitionBase *IntuitionBase;
  26. struct Window *Fenetre;
  27. struct NewWindow NouvFenetre={
  28.     50,30,
  29.     LARGEUR,HAUTEUR,
  30.     3,1,
  31.     CLOSEWINDOW|MOUSEBUTTONS,             /*flags pour action attendu */
  32.     WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|ACTIVATE|GIMMEZEROZERO|SMART_REFRESH,
  33.     0,0,
  34.     "Casse-tronche",
  35.     0,0,
  36.     0,0,
  37.     LARGEUR,HAUTEUR,
  38.     WBENCHSCREEN
  39.     };
  40.  
  41. struct IntuiMessage *Message;
  42.  
  43. UWORD ImageSignature_data[16 * 30 * 2] = {
  44. 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  45. 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  46. 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  47. 0xffff,0xffff,0xffff,0xffff,0xffff,0x9fff,0xffff,0xffff,0xffff,0xffff,0x9fff,0xffff,0xffff,0xffff,0xffff,0xffff,
  48. 0xffff,0xff7f,0x7fff,0xffff,0xffff,0x3fff,0xffff,0xffff,0xffff,0xffff,0x3fff,0xffff,0xffff,0xfffd,0xfdff,0xffff,
  49. 0xffff,0xffbe,0xffff,0xffff,0xfffe,0x7fff,0xffff,0xffff,0xffff,0xfffe,0x7cff,0xffff,0xffff,0xfffe,0xfbff,0xffff,
  50. 0xffff,0xfedd,0xbfff,0xfffe,0x0703,0xffff,0xffff,0xfffc,0x1fff,0xffff,0xf8ff,0xffff,0xffff,0xfffb,0x76ff,0xffff,
  51. 0xfffd,0xffeb,0xffdf,0xffff,0x0fc4,0x1038,0x1c03,0xffff,0x0fe0,0x861c,0x1000,0xe01f,0xffff,0xf7ff,0xafff,0x7fff,
  52. 0xfffd,0xbf3e,0x7edf,0xffff,0x8fce,0x187c,0x38e3,0xffff,0x87f0,0x208e,0x1f8f,0xc71f,0xffff,0xf6fc,0xf9fb,0x7fff,
  53. 0xfffe,0x73aa,0xe73f,0xffff,0x8fcf,0x1c7e,0x71e3,0xffff,0x03f8,0x71c7,0x1e3f,0x8f1f,0xffff,0xf9ce,0xab9c,0xffff,
  54. 0xffff,0x29d5,0xca7f,0xffff,0x8fcf,0x1c7e,0x63e3,0xfffe,0x61f8,0xf1c7,0x1c7f,0x1f1f,0xffff,0xfca7,0x5729,0xffff,
  55. 0xffc8,0x79ff,0xcf09,0xffff,0xc79f,0x1e3c,0xe3e3,0xfff9,0xc0f8,0xf1c7,0x18ff,0x1f1f,0xffff,0x21e7,0xff3c,0x27ff,
  56. 0xfff7,0x73ff,0xe777,0xffff,0xe33f,0x1f19,0xf1e3,0xfff1,0x9878,0xf1c7,0x1c7f,0x8f1f,0xffff,0xddcf,0xff9d,0xdfff,
  57. 0xffff,0x07ff,0xf07f,0xffff,0xf07f,0x1f83,0xf8e0,0x7ff0,0x7c38,0xf1c7,0x1e3f,0xc703,0xffff,0xfc1f,0xffc1,0xffff,
  58. 0xffff,0xffff,0xffff,0xffff,0xf8ff,0x1fc7,0xfc00,0xfff9,0xfe18,0xe38f,0x1f87,0xe007,0xffff,0xffff,0xffff,0xffff,
  59. 0xffff,0x07ff,0xf07f,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xfff1,0xffff,0xffff,0xfc1f,0xffc1,0xffff,
  60. 0xfff7,0x73ff,0xe777,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xfe78,0xffff,0xffff,0xddcf,0xff9d,0xdfff,
  61. 0xffc8,0x3dff,0xde09,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf871,0xffff,0xffff,0x20f7,0xff78,0x27ff,
  62. 0xffff,0x6380,0xe37f,0xe007,0xffff,0xffff,0xffff,0xe007,0xffff,0xfcff,0xff03,0xf1ff,0xffff,0xfd8e,0x038d,0xffff,
  63. 0xfffe,0xff3e,0x7fbf,0xe003,0xffff,0xffff,0xffff,0xe007,0xffff,0xf87f,0xffff,0xf1ff,0xffff,0xfbfc,0xf9fe,0xffff,
  64. 0xfffd,0xbfaa,0xfedf,0xf1e1,0xffff,0xffff,0xffff,0xc7c7,0xffff,0xf87f,0xffff,0xf3ff,0xffff,0xf6fe,0xabfb,0x7fff,
  65. 0xffff,0xffc9,0xffff,0xf1e0,0x010c,0x200f,0x01ff,0x8fe6,0x0218,0x6038,0x6100,0x61e0,0x200f,0xffff,0x27ff,0xffff,
  66. 0xffff,0xfedd,0xbfff,0xf001,0x000c,0x2006,0x00ff,0xcffc,0x0018,0x7378,0x6100,0x21c0,0x0007,0xfffb,0x76ff,0xffff,
  67. 0xffff,0xff3e,0x7fff,0xf20e,0xdb8e,0x31c6,0x78ff,0x9ffc,0xf11c,0x79fc,0x7186,0x31c8,0x10c7,0xfffc,0xf9ff,0xffff,
  68. 0xffff,0xffff,0xffff,0xf5ea,0xbfce,0xbdf6,0x3eff,0xefe4,0x7d9d,0x7afe,0x75ef,0xf9c2,0x19ff,0xffff,0xffff,0xffff,
  69. 0xffff,0xffff,0xffff,0xfbf7,0xffbe,0xb7df,0xfbff,0x97df,0xf77d,0x7d8d,0xf5bf,0xf7ff,0x97ff,0xffff,0xffff,0xffff,
  70. 0xffff,0xffff,0xffff,0xe408,0x9ff1,0xceba,0xc7ff,0xd01d,0x8fe3,0xba2f,0x8e77,0xeed8,0x6eff,0xffff,0xffff,0xffff,
  71. 0xffff,0xffff,0xffff,0xf7ff,0xffff,0xfeff,0xfdff,0xf7ff,0xfbfe,0xffff,0xfbf7,0xffff,0xbfff,0xffff,0xffff,0xffff,
  72. 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  73. 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  74. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  75. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  76. 0x0000,0x0000,0x0000,0x0000,0x0000,0x6000,0x0000,0x0000,0x0000,0x0000,0x6000,0x0000,0x0000,0x0000,0x0000,0x0000,
  77. 0x0000,0x0000,0x0000,0x0000,0x0000,0xf000,0x0000,0x0000,0x0000,0x0000,0xf000,0x0000,0x0000,0x0000,0x0000,0x0000,
  78. 0x0000,0x0080,0x8000,0x0000,0x0001,0xe000,0x0000,0x0000,0x0000,0x0001,0xe300,0x0000,0x0000,0x0002,0x0200,0x0000,
  79. 0x0000,0x0041,0x0000,0x0001,0xf8ff,0xc000,0x0000,0x0003,0xe000,0x0003,0xc780,0x0000,0x0000,0x0001,0x0400,0x0000,
  80. 0x0000,0x0122,0x4000,0x0003,0xfdff,0xefc7,0xe3fc,0x0007,0xf01f,0x79e3,0xefff,0x1fe0,0x0000,0x0004,0x8900,0x0000,
  81. 0x0002,0x0014,0x0020,0x0001,0xf8ff,0xffef,0xf7fe,0x0003,0xf83f,0xfff7,0xffff,0xbff0,0x0000,0x0800,0x5000,0x8000,
  82. 0x0002,0x40c1,0x8120,0x0000,0xf87b,0xffc7,0xeffe,0x0000,0xfc1f,0xfffb,0xffff,0x7ff0,0x0000,0x0903,0x0604,0x8000,
  83. 0x0001,0x8c55,0x18c0,0x0000,0xf879,0xf7c3,0xdf3e,0x0001,0xfe0f,0xdf7d,0xf3f0,0xf9f0,0x0000,0x0631,0x5463,0x0000,
  84. 0x0000,0xd62a,0x3580,0x0000,0xf879,0xf7c3,0xfe3e,0x0007,0xff0f,0x9f7d,0xf7c1,0xf1f0,0x0000,0x0358,0xa8d6,0x0000,
  85. 0x0037,0x8600,0x30f6,0x0000,0x7cf1,0xf3e7,0xbe3e,0x000f,0xff8f,0x9f7d,0xff81,0xf1f0,0x0000,0xde18,0x00c3,0xd800,
  86. 0x0008,0x8c00,0x1888,0x0000,0x3fe1,0xf1ff,0x1f3f,0x801f,0xffcf,0x9f7d,0xf7c0,0xf9fc,0x0000,0x2230,0x0062,0x2000,
  87. 0x0000,0xf800,0x0f80,0x0000,0x1fc1,0xf0fe,0x0fff,0xc01f,0xe7ef,0x9f7d,0xf3f8,0x7ffe,0x0000,0x03e0,0x003e,0x0000,
  88. 0x0000,0x0000,0x0000,0x0000,0x0f81,0xf07c,0x07ff,0x800f,0x83ff,0xbef9,0xf1fe,0x3ffc,0x0000,0x0000,0x0000,0x0000,
  89. 0x0000,0xf800,0x0f80,0x0000,0x0700,0xe038,0x03ff,0x0006,0x01e7,0x1c70,0xe1ff,0x1ff8,0x0000,0x03e0,0x003e,0x0000,
  90. 0x0008,0x8c00,0x1888,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07cf,0x8000,0x0000,0x2230,0x0062,0x2000,
  91. 0x0037,0xc200,0x21f6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0fff,0x0000,0x0000,0xdf08,0x0087,0xd800,
  92. 0x0000,0x9c7f,0x1c80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07fe,0x0000,0x0000,0x0271,0xfc72,0x0000,
  93. 0x0001,0x00c1,0x8040,0x1ff8,0x0000,0x0000,0x0000,0x1ff8,0x0000,0x0300,0x00fc,0x0e00,0x0000,0x0403,0x0601,0x0000,
  94. 0x0002,0x4055,0x0120,0x0e1c,0x0000,0x0000,0x0000,0x3838,0x0000,0x0700,0x0000,0x0e00,0x0000,0x0901,0x5404,0x8000,
  95. 0x0000,0x0036,0x0000,0x0e1c,0x0000,0x0000,0x0000,0x7018,0x0000,0x0700,0x0000,0x0000,0x0000,0x0000,0xd800,0x0000,
  96. 0x0000,0x0122,0x4000,0x0e1f,0xfef3,0xdff0,0xfe00,0x7001,0xfde7,0x9fc7,0x9eff,0x9e1f,0xdff0,0x0004,0x8900,0x0000,
  97. 0x0000,0x00c1,0x8000,0x0ff9,0xe771,0xce39,0xc700,0x7003,0x8ee3,0x8703,0x8e79,0xce38,0xef38,0x0003,0x0600,0x0000,
  98. 0x0000,0x0000,0x0000,0x0e1d,0xc071,0xce39,0xc700,0x7003,0x8ee3,0x8703,0x8e70,0x0e3f,0xee00,0x0000,0x0000,0x0000,
  99. 0x0000,0x0000,0x0000,0x0e1d,0xc071,0xce39,0xc700,0x701b,0x8ee3,0x8703,0x8e70,0x0e38,0x0e00,0x0000,0x0000,0x0000,
  100. 0x0000,0x0000,0x0000,0x0e1d,0xc071,0xce39,0xc700,0x3833,0x8ee3,0x8773,0x8e70,0x0e38,0x6e00,0x0000,0x0000,0x0000,
  101. 0x0000,0x0000,0x0000,0x1ffb,0xe03f,0x7f7c,0xfe00,0x1fe1,0xfc7f,0xc3e1,0xfff8,0x1f1f,0xdf00,0x0000,0x0000,0x0000,
  102. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  103. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
  104.  
  105. struct Image ImageSignature = {
  106.    0, 0, 256, 30, 2, &ImageSignature_data[0], 3, 0, NULL};
  107.  
  108. /*********************************************** */
  109. /*              Pointer Data                     */
  110. /*************************************************/
  111.  
  112. /* Pointeur fer a cheval */
  113.  
  114. #define POINTER1_HEIGHT 16
  115. #define POINTER1_WIDTH  16
  116. #define POINTER1_HOTX   -9
  117. #define POINTER1_HOTY   0
  118.  
  119. UWORD pointer1_dat[] = {
  120.         0x0000,0x0000,
  121.         0x0,0x5225,
  122.         0x0,0x294A,
  123.         0x0,0x140,
  124.         0x0,0x1C1C,
  125.         0x0,0x1C1C,
  126.         0x1C1C,0x404,
  127.         0x1C1C,0x404,
  128.         0x1C1C,0x404,
  129.         0x380E,0x802,
  130.         0x380E,0x802,
  131.         0x380E,0x802,
  132.         0x380E,0x802,
  133.         0x1C1C,0x404,
  134.         0x1FF8,0x3C0,
  135.         0xFF0,0x0,
  136.         0x3C0,0x0,
  137.         0x0000,0x0000
  138. };
  139.  
  140. int TableauJeu[6][7]={
  141.                 {20,20,20,20,20,20,20},
  142.                 {20, 1, 1, 2, 2, 6,20},
  143.                 {20, 0, 0, 5, 7,10,20},
  144.                 {20, 0, 0, 5, 8,10,20},
  145.                 {20, 3, 3, 4, 4, 9,20},
  146.                 {20,20,20,20,20,20,20}
  147. };
  148. int TabPiece[10][4]={
  149.                 {2,1,2,2},
  150.                 {1,1,1,2},
  151.                 {1,3,1,2},
  152.                 {4,1,1,2},
  153.                 {4,3,1,2},
  154.                 {2,3,2,1},
  155.                 {1,5,1,1},
  156.                 {2,4,1,1},
  157.                 {3,4,1,1},
  158.                 {4,5,1,1}
  159. };
  160.  
  161. int PosX,PosY;
  162. long TaH,TaV;
  163. long int coup;
  164. long DeplN=0,DeplS=0,DeplO=0,DeplE=0;
  165. long Etat=-1;
  166. long im=0;
  167. char ascoup[4];
  168.  
  169. #define MAXITEMS 5
  170.  
  171. struct Menu Menus;
  172. struct MenuItem Items[5];
  173. struct MenuItem SubItem[4];
  174. struct IntuiText Texts[5];
  175. struct IntuiText SubTexts[4];
  176.  
  177. char *IString[9]={
  178.     "COUPS N°    0","How to play","Info","     ",
  179.     "Wait and see...",
  180.     "COUTURIER Bruno le 01 01 1990",
  181.     "Reset","Quit",
  182.     "Observez l'icone / Look at the Icon"};
  183.  
  184. VOID OpenAll();
  185. VOID CloseIt();
  186. VOID Dessin();
  187. VOID DetectMess();
  188. VOID DeterPos();
  189. VOID IDCMPoff();
  190. VOID IDCMPon();
  191. VOID Dessine();
  192. long Verif();
  193. VOID BuildUpMenu();
  194. VOID Compte();
  195. VOID Reset();
  196.  
  197. /******************************************************************************/
  198. /*                                                                            */
  199. /* Prg  principal                                                             */
  200. /*                                                                            */
  201. /******************************************************************************/
  202.  
  203. void _main()
  204. {
  205.     long v=0;
  206.  
  207.     OpenAll();
  208.     Reset();
  209.     while(v!=2)
  210.     {
  211.  
  212.         DetectMess();
  213.         v=Verif();
  214.         if(v>0)
  215.         {
  216.                 SetAPen(RPORT,0);
  217.                 RectFill(RPORT,0,0,218,171);
  218.                 SetAPen(RPORT,2);
  219.                 RectFill(RPORT,0,0,218,171);
  220.                 SetAPen(RPORT,3);
  221.                 Move(RPORT,30,71);
  222.                 Draw(RPORT,181,71);
  223.                 Move(RPORT,30,78);
  224.                 SetDrMd(RPORT,JAM2|INVERSVID);
  225.                 Text(RPORT,"Bravo :",7);
  226.                 Text(RPORT,Texts[0].IText,12);
  227.                 Wait(1<<Fenetre->UserPort->mp_SigBit);
  228.                 v=0;
  229.                 Reset();
  230.         }
  231.     }
  232. }
  233.  
  234. /******************************************************************************/
  235. /*                                                                            */
  236. /* Cette fonction ouvre les librairies et la fenetre et construit le menu     */
  237. /*                                                                            */
  238. /*----------------------------------------------------------------------------*/
  239. /* Parametres en entrée :aucun                                                */
  240. /*                                                                            */
  241. /*----------------------------------------------------------------------------*/
  242. /* Valeurs de réponse :aucun                                                  */
  243. /*                                                                            */
  244. /******************************************************************************/
  245.  
  246. VOID OpenAll()
  247. {
  248.  
  249.   IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0);
  250.   if (!IntuitionBase)CloseIt();
  251.  
  252.   GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0);
  253.   if (!GfxBase)CloseIt();
  254.  
  255.   Fenetre=(struct Window *)OpenWindow(&NouvFenetre);
  256.   if (!Fenetre)CloseIt();
  257.  
  258.   BuildUpMenu();
  259.   SetMenuStrip(Fenetre,&Menus);
  260.  
  261.   SetPointer(Fenetre,&pointer1_dat[0],POINTER1_HEIGHT,POINTER1_WIDTH,
  262.                         POINTER1_HOTX,POINTER1_HOTY);
  263. }
  264.  
  265. /******************************************************************************/
  266. /*                                                                            */
  267. /* Cette routine ferme tout                                                   */
  268. /*                                                                            */
  269. /*----------------------------------------------------------------------------*/
  270. /* Parametres en entrée :chaine à sortir                                      */
  271. /*                                                                            */
  272. /*----------------------------------------------------------------------------*/
  273. /* Valeurs de réponse :aucune                                                 */
  274. /*                                                                            */
  275. /******************************************************************************/
  276.  
  277. VOID CloseIt()
  278. {
  279.     if(Fenetre)ClearPointer(Fenetre);
  280.     if(Fenetre)ClearMenuStrip(Fenetre);
  281.     if(Fenetre)CloseWindow(Fenetre);
  282.     if(GfxBase)CloseLibrary(GfxBase);
  283.     if(IntuitionBase)CloseLibrary(IntuitionBase);
  284.  
  285.     exit(0);
  286. }
  287.  
  288. /******************************************************************************/
  289. /*                                                                            */
  290. /* Cette routine dessine la position initiale                                 */
  291. /*                                                                            */
  292. /*----------------------------------------------------------------------------*/
  293. /* Parametres en entrée :aucun                                                */
  294. /*                                                                            */
  295. /*----------------------------------------------------------------------------*/
  296. /* Valeurs de réponse :aucune                                                 */
  297. /*                                                                            */
  298. /******************************************************************************/
  299.  
  300. VOID Dessin()
  301. {
  302.   register i;
  303.  
  304.   BNDRYOFF(RPORT);
  305.   SetDrMd(RPORT,JAM1);
  306.  
  307.   SetAPen(RPORT,0);
  308.   RectFill(RPORT,0,0,218,171);
  309.  
  310.   TaH=TabPiece[0][2];
  311.   TaV=TabPiece[0][3];
  312.   Dessine(TabPiece[0][0],TabPiece[0][1],3);
  313.   for(i=1;i<=9;i++)
  314.   {
  315.       TaH=TabPiece[i][2];
  316.       TaV=TabPiece[i][3];
  317.       Dessine(TabPiece[i][0],TabPiece[i][1],2);
  318.   }
  319. }
  320.  
  321.  
  322. /******************************************************************************/
  323. /*                                                                            */
  324. /* Cette routine determine PosX et PosY en fonction de MouseX et MouseY       */
  325. /*                                                                            */
  326. /*----------------------------------------------------------------------------*/
  327. /* Parametres en entrée :MX= MouseX                                           */
  328. /*                       MY= MouseY                                           */
  329. /*                                                                            */
  330. /*----------------------------------------------------------------------------*/
  331. /* Valeurs de réponse :aucune                                                 */
  332. /*                                                                            */
  333. /******************************************************************************/
  334.  
  335. VOID DeterPos(MX,MY)
  336. register MX,MY;
  337. {
  338.     if(MX>0)
  339.     {
  340.         if((MX>213)&&(MX<3))PosX=-1;
  341.         if((MX>160)&&(MX<=213))PosX=4;
  342.         if((MX<=160)&&(MX>110))PosX=3;
  343.         if((MX>53)&&(MX<=110))PosX=2;
  344.         if(MX<=53)PosX=1;
  345.     }
  346.     if(MX<=0)PosX=-1;
  347.  
  348.     if(MY>0)
  349.     {
  350.         if((MY>170)&&(MY<=10))PosY=-1;
  351.         if((MY<=169)&&(MY>137))PosY=5;
  352.         if((MY<=137)&&(MY>105))PosY=4;
  353.         if((MY<=105)&&(MY>73))PosY=3;
  354.         if((MY<=73)&&(MY>41))PosY=2;
  355.         if(MY<=41)PosY=1;
  356.     }
  357.     if(MY<=0)PosY=-1;
  358. }
  359.  
  360. /******************************************************************************/
  361. /*                                                                            */
  362. /* Cette fonction désactive le transfert de messages                          */
  363. /* par Intuition.C'est très important car les messages                        */
  364. /* d'Intuition sont normalement sauvegardé dans une                           */
  365. /* list(queue),pour ètre traités l'un après l'autre.                          */
  366. /* Comme il est cependant impossible,par moments, de                          */
  367. /* réagir à Intuition(par exemple pendant le calcul ou                        */
  368. /* le dessin),il faut éviter que des messages envoyés                         */
  369. /* pendant ce temps(par exemple des touches actionnées)                       */
  370. /* ne s'accumulent pour ètre ensuite traités de façon                         */
  371. /* assez incohérente (pour l'utilisateur).                                    */
  372. /*                                                                            */
  373. /*----------------------------------------------------------------------------*/
  374. /* Parametres en entrée : aucun                                               */
  375. /*                                                                            */
  376. /*----------------------------------------------------------------------------*/
  377. /* Valeurs de réponse : aucune                                                */
  378. /*                                                                            */
  379. /******************************************************************************/
  380.  
  381. VOID IDCMPoff()
  382. {
  383.     SetMenuStrip(Fenetre,NULL);
  384.     ModifyIDCMP(Fenetre,NULL);  /* Eliminer le menu de la fenetre */
  385. }
  386.  
  387. /******************************************************************************/
  388. /*                                                                            */
  389. /* Cette routine autorise à nouveau Intuition à envoyer des messages.         */
  390. /*                                                                            */
  391. /*----------------------------------------------------------------------------*/
  392. /* Parametres en entrée : aucun                                               */
  393. /*                                                                            */
  394. /*----------------------------------------------------------------------------*/
  395. /* Valeurs de réponse : aucune                                                */
  396. /*                                                                            */
  397. /******************************************************************************/
  398.  
  399. VOID IDCMPon()
  400. {
  401.     SetMenuStrip(Fenetre,&Menus);
  402.     ModifyIDCMP(Fenetre,MOUSEBUTTONS|CLOSEWINDOW|MENUPICK);
  403. }
  404.  
  405. /******************************************************************************/
  406. /*                                                                            */
  407. /* Cette routine detecte un message d'Intuition                               */
  408. /*                                                                            */
  409. /*----------------------------------------------------------------------------*/
  410. /* Parametres en entrée :aucun                                                */
  411. /*                                                                            */
  412. /*----------------------------------------------------------------------------*/
  413. /* Valeurs de réponse :aucune                                                 */
  414. /*                                                                            */
  415. /******************************************************************************/
  416.  
  417. VOID DetectMess()
  418. {
  419.     long Class,Code;
  420.     long x,y,Piece,PosXact,PosYact;
  421.  
  422.     IDCMPon();
  423.     Wait(1<<Fenetre->UserPort->mp_SigBit);
  424.  
  425.     while(Message=(struct IntuiMessage *)GetMsg(Fenetre->UserPort))
  426.     {
  427.         im=0;
  428.         Class=Message->Class;
  429.         Code=Message->Code;
  430.         x=Message->MouseX;
  431.         y=Message->MouseY;
  432.         ReplyMsg(Message);
  433.  
  434.         switch(Class)
  435.         {
  436.             case MOUSEBUTTONS:
  437.                if((Code==SELECTDOWN)&(Etat==-1))
  438.                {
  439.                   IDCMPoff();
  440.                   DeterPos(x,y);
  441.                   if((PosX>-1)&&(PosY>-1))
  442.                   {
  443.                     Piece=TableauJeu[PosX][PosY];
  444.                     if(Piece!=10)
  445.                     {
  446.                         PosXact=TabPiece[Piece][0];
  447.                         PosYact=TabPiece[Piece][1];
  448.                         TaH=TabPiece[Piece][2];
  449.                         TaV=TabPiece[Piece][3];
  450.                         DeplN=DeplS=DeplO=DeplE=0;
  451.  
  452.                         if((TableauJeu[PosXact-1][PosYact]==10)&
  453.                          (TableauJeu[PosXact-1][PosYact+TaV-1]==10))DeplO=1;
  454.                         if((TableauJeu[PosXact][PosYact-1]==10)&
  455.                          (TableauJeu[PosXact+TaH-1][PosYact-1]==10))DeplN=1;
  456.                         if((TableauJeu[PosXact+TaH][PosYact]==10)&
  457.                          (TableauJeu[PosXact+TaH][PosYact+TaV-1]==10))DeplE=1;
  458.                         if((TableauJeu[PosXact][PosYact+TaV]==10)&
  459.                          (TableauJeu[PosXact+TaH-1][PosYact+TaV]==10))DeplS=1;
  460.  
  461.                         if((DeplN==1)|(DeplO==1)|(DeplE==1)|(DeplS==1))
  462.                         {
  463.                                 SetOPen(RPORT,1);
  464.                                 if(Piece==0)Dessine(PosXact,PosYact,2);
  465.                                 if(Piece!=0)Dessine(PosXact,PosYact,3);
  466.                                 Etat=Piece;
  467.                                 im=1;
  468.                         }
  469.                     }
  470.                   }
  471.                }
  472.  
  473.                if((Code==SELECTDOWN)&(Etat!=-1)&(im==0))
  474.                {
  475.                   IDCMPoff();
  476.                   DeterPos(x,y);
  477.                   if((PosX>-1)&&(PosY>-1))
  478.                   {
  479.                     Piece=TableauJeu[PosX][PosY];
  480.                     if(Piece==Etat)
  481.                     {
  482.                       BNDRYOFF (RPORT);
  483.                       if(Piece==0)Dessine(PosXact,PosYact,3);
  484.                       if(Piece!=0)Dessine(PosXact,PosYact,2);
  485.                       Etat=-1;
  486.                     }
  487.                     if(Piece==10)
  488.                     {
  489.                       if((PosX==PosXact-1)&
  490.                           ((PosY==PosYact)|(PosY==PosYact+TaV-1))&(DeplO==1))
  491.                       {
  492.                           TableauJeu[PosXact-1][PosYact]=
  493.                                         TableauJeu[PosXact][PosYact];
  494.                           TableauJeu[PosXact-1][PosYact+TaV-1]=
  495.                                         TableauJeu[PosXact][PosYact];
  496.                           TableauJeu[PosXact+TaH-1][PosYact]=10;
  497.                           TableauJeu[PosXact+TaH-1][PosYact+TaV-1]=10;
  498.                           TabPiece[Etat][0]-=1;
  499.                           BNDRYOFF(RPORT);
  500.                           Dessine(PosXact,PosYact,0);
  501.                           if(Etat==0)Dessine(PosXact-1,PosYact,3);
  502.                           if(Etat!=0)Dessine(PosXact-1,PosYact,2);
  503.                           Compte();
  504.                           Etat=-1;
  505.                       }
  506.                       if((PosX==PosXact-2)&
  507.                           ((PosY==PosYact)|(PosY==PosYact+TaV-1))&(DeplO==1))
  508.                       {
  509.                           TableauJeu[PosXact-2][PosYact]=
  510.                                         TableauJeu[PosXact][PosYact];
  511.                           TableauJeu[PosXact-2][PosYact+TaV-1]=
  512.                                         TableauJeu[PosXact][PosYact];
  513.                           TableauJeu[PosXact-2+TaH-1][PosYact]=
  514.                                         TableauJeu[PosXact][PosYact];
  515.                           TableauJeu[PosXact-2+TaH-1][PosYact+TaV-1]=
  516.                                         TableauJeu[PosXact][PosYact];
  517.                           TableauJeu[PosXact][PosYact]=10;
  518.                           TableauJeu[PosXact+TaH-1][PosYact]=10;
  519.                           TableauJeu[PosXact][PosYact+TaV-1]=10;
  520.                           TableauJeu[PosXact+TaH-1][PosYact+TaV-1]=10;
  521.                           TabPiece[Etat][0]-=2;
  522.                           BNDRYOFF(RPORT);
  523.                           Dessine(PosXact,PosYact,0);
  524.                           if(Etat==0)Dessine(PosXact-2,PosYact,3);
  525.                           if(Etat!=0)Dessine(PosXact-2,PosYact,2);
  526.                           Compte();
  527.                           Compte();
  528.                           Etat=-1;
  529.                       }
  530.                       if((PosX==PosXact+TaH)&
  531.                           ((PosY==PosYact)|(PosY==PosYact+TaV-1))&(DeplE==1))
  532.                       {
  533.                           TableauJeu[PosXact+TaH][PosYact]=
  534.                                         TableauJeu[PosXact][PosYact];
  535.                           TableauJeu[PosXact+TaH][PosYact+TaV-1]=
  536.                                         TableauJeu[PosXact][PosYact+TaV-1];
  537.                           TableauJeu[PosXact][PosYact]=10;
  538.                           TableauJeu[PosXact][PosYact+TaV-1]=10;
  539.                           TabPiece[Etat][0]+=1;
  540.                           BNDRYOFF(RPORT);
  541.                           Dessine(PosXact,PosYact,0);
  542.                           if(Etat==0)Dessine(PosXact+1,PosYact,3);
  543.                           if(Etat!=0)Dessine(PosXact+1,PosYact,2);
  544.                           Compte();
  545.                           Etat=-1;
  546.                       }
  547.                       if((PosX==PosXact+TaH+1)&
  548.                           ((PosY==PosYact)|(PosY==PosYact+TaV-1))&(DeplE==1))
  549.                       {
  550.                           TableauJeu[PosXact+TaH+1][PosYact]=
  551.                                         TableauJeu[PosXact][PosYact];
  552.                           TableauJeu[PosXact+TaH+1][PosYact+TaV-1]=
  553.                                         TableauJeu[PosXact][PosYact+TaV-1];
  554.                           TableauJeu[PosXact+TaH+1-(TaH-1)][PosYact]=
  555.                                         TableauJeu[PosXact][PosYact];
  556.                           TableauJeu[PosXact+TaH+1-(TaH-1)][PosYact+TaV-1]=
  557.                                         TableauJeu[PosXact][PosYact+TaV-1];
  558.                           TableauJeu[PosXact][PosYact]=10;
  559.                           TableauJeu[PosXact][PosYact+TaV-1]=10;
  560.                           TableauJeu[PosXact+TaH-1][PosYact]=10;
  561.                           TableauJeu[PosXact+TaH-1][PosYact+TaV-1]=10;
  562.                           TabPiece[Etat][0]+=2;
  563.                           BNDRYOFF(RPORT);
  564.                           Dessine(PosXact,PosYact,0);
  565.                           if(Etat==0)Dessine(PosXact+2,PosYact,3);
  566.                           if(Etat!=0)Dessine(PosXact+2,PosYact,2);
  567.                           Compte();
  568.                           Compte();
  569.                           Etat=-1;
  570.                       }
  571.                       if(((PosX==PosXact)|(PosX==PosXact+TaH-1))&
  572.                           (PosY==PosYact-2)&(DeplN==1))
  573.                       {
  574.                           TableauJeu[PosXact][PosYact-2]=
  575.                                         TableauJeu[PosXact][PosYact];
  576.                           TableauJeu[PosXact+TaH-1][PosYact-2]=
  577.                                         TableauJeu[PosXact][PosYact];
  578.                           TableauJeu[PosXact][PosYact-2+(TaV-1)]=
  579.                                         TableauJeu[PosXact][PosYact];
  580.                           TableauJeu[PosXact+TaH-1][PosYact-2+(TaV-1)]=
  581.                                         TableauJeu[PosXact+TaH-1][PosYact];
  582.                           TableauJeu[PosXact][PosYact]=10;
  583.                           TableauJeu[PosXact+TaH-1][PosYact]=10;
  584.                           TableauJeu[PosXact][PosYact+TaV-1]=10;
  585.                           TableauJeu[PosXact+TaH-1][PosYact+TaV-1]=10;
  586.                           TabPiece[Etat][1]-=2;
  587.                           BNDRYOFF(RPORT);
  588.                           Dessine(PosXact,PosYact,0);
  589.                           if(Etat==0)Dessine(PosXact,PosYact-2,3);
  590.                           if(Etat!=0)Dessine(PosXact,PosYact-2,2);
  591.                           Compte();
  592.                           Compte();
  593.                           Etat=-1;
  594.                       }
  595.                       if(((PosX==PosXact)|(PosX==PosXact+TaH-1))&
  596.                           (PosY==PosYact-1)&(DeplN==1))
  597.                       {
  598.                           TableauJeu[PosXact][PosYact-1]=
  599.                                         TableauJeu[PosXact][PosYact];
  600.                           TableauJeu[PosXact+TaH-1][PosYact-1]=
  601.                                         TableauJeu[PosXact+TaH-1][PosYact];
  602.                           TableauJeu[PosXact][PosYact+TaV-1]=10;
  603.                           TableauJeu[PosXact+TaH-1][PosYact+TaV-1]=10;
  604.                           TabPiece[Etat][1]-=1;
  605.                           BNDRYOFF(RPORT);
  606.                           Dessine(PosXact,PosYact,0);
  607.                           if(Etat==0)Dessine(PosXact,PosYact-1,3);
  608.                           if(Etat!=0)Dessine(PosXact,PosYact-1,2);
  609.                           Compte();
  610.                           Etat=-1;
  611.                       }
  612.                       if(((PosX==PosXact)|(PosX==PosXact+TaH-1))&
  613.                           (PosY==PosYact+TaV)&(DeplS==1))
  614.                       {
  615.                           TableauJeu[PosXact][PosYact+TaV]=
  616.                                         TableauJeu[PosXact][PosYact];
  617.                           TableauJeu[PosXact+TaH-1][PosYact+TaV]=
  618.                                         TableauJeu[PosXact][PosYact];
  619.                           TableauJeu[PosXact][PosYact]=10;
  620.                           TableauJeu[PosXact+TaH-1][PosYact]=10;
  621.                           TabPiece[Etat][1]+=1;
  622.                           BNDRYOFF(RPORT);
  623.                           Dessine(PosXact,PosYact,0);
  624.                           if(Etat==0)Dessine(PosXact,PosYact+1,3);
  625.                           if(Etat!=0)Dessine(PosXact,PosYact+1,2);
  626.                           Compte();
  627.                           Etat=-1;
  628.                       }
  629.                       if(((PosX==PosXact)|(PosX==PosXact+TaH-1))&
  630.                           (PosY==PosYact+TaV+1)&(DeplS==1))
  631.                       {
  632.                           TableauJeu[PosXact][PosYact+2]=
  633.                                         TableauJeu[PosXact][PosYact];
  634.                           TableauJeu[PosXact+TaH-1][PosYact+2]=
  635.                                         TableauJeu[PosXact][PosYact];
  636.                           TableauJeu[PosXact][PosYact+2+TaV-1]=
  637.                                         TableauJeu[PosXact][PosYact];
  638.                           TableauJeu[PosXact+TaH-1][PosYact+2+TaV-1]=
  639.                                         TableauJeu[PosXact][PosYact];
  640.                           TableauJeu[PosXact][PosYact]=10;
  641.                           TableauJeu[PosXact+TaH-1][PosYact]=10;
  642.                           TableauJeu[PosXact][PosYact+TaV-1]=10;
  643.                           TableauJeu[PosXact+TaH-1][PosYact+TaV-1]=10;
  644.                           TabPiece[Etat][1]+=2;
  645.                           BNDRYOFF(RPORT);
  646.                           Dessine(PosXact,PosYact,0);
  647.                           if(Etat==0)Dessine(PosXact,PosYact+2,3);
  648.                           if(Etat!=0)Dessine(PosXact,PosYact+2,2);
  649.                           Compte();
  650.                           Compte();
  651.                           Etat=-1;
  652.                       }
  653.                     }
  654.                   }
  655.                }
  656.  
  657.                IDCMPon();
  658.                break;
  659.             case MENUPICK:
  660.                 if(Code!=MENUNULL)
  661.                           switch(MENUNUM(Code))
  662.                           {
  663.                               case 0:
  664.                                   switch(ITEMNUM(Code))
  665.                                   {
  666.                                       case 4:
  667.                                           switch(SUBNUM(Code))
  668.                                           {
  669.                                               case 0:
  670.                                                 IDCMPoff();
  671.                                                 Reset();
  672.                                                 IDCMPon();
  673.                                                 break;
  674.                                               case 1:
  675.                                                 CloseIt();
  676.                                           }
  677.                                   }
  678.                           }
  679.                   break;
  680.             case CLOSEWINDOW:
  681.                CloseIt();
  682.         }
  683.     }
  684. }
  685.  
  686. /******************************************************************************/
  687. /*                                                                            */
  688. /* Cette routine verifie si la position est gagnante                          */
  689. /*                                                                            */
  690. /*----------------------------------------------------------------------------*/
  691. /* Parametres en entrée :aucun                                                */
  692. /*                                                                            */
  693. /*----------------------------------------------------------------------------*/
  694. /* Valeurs de réponse :v=1 si position gagnante                               */
  695. /*                                                                            */
  696. /******************************************************************************/
  697.  
  698. long Verif()
  699. {
  700.     register long v=0;
  701.     if(TableauJeu[2][5]==TableauJeu[3][5]==10)v=1;
  702.     return(v);
  703. }
  704.  
  705. /******************************************************************************/
  706. /*                                                                            */
  707. /* Cette routine dessine une piece                                            */
  708. /*                                                                            */
  709. /*----------------------------------------------------------------------------*/
  710. /* Parametres en entrée :x=PosXact de la piece                                */
  711. /*                       y=PosYact de la piece                                */
  712. /*                       Apen= couleur                                        */
  713. /*                                                                            */
  714. /*----------------------------------------------------------------------------*/
  715. /* Valeurs de réponse :aucune                                                 */
  716. /*                                                                            */
  717. /******************************************************************************/
  718.  
  719. VOID Dessine(x,y,Apen)
  720. register x,y,Apen;
  721. {
  722.     long x1,y1,x2,y2;
  723.     SetAPen(RPORT,Apen);
  724.     x1=(x-1)*(50+3);
  725.     y1=(y-1)*(30+2);
  726.     x2=(x-1)*(50+3)+(TaH*50)+((TaH-1)*3);
  727.     y2=(y-1)*(30+2)+(TaV*30)+((TaV-1)*2);
  728.     RectFill(RPORT,x1,y1,x2,y2);
  729. }
  730.  
  731. /******************************************************************************/
  732. /*                                                                            */
  733. /* Cette fonction construit un menu et ses entrées                            */
  734. /*                                                                            */
  735. /*----------------------------------------------------------------------------*/
  736. /* Parametres en entrée :aucun                                                */
  737. /*----------------------------------------------------------------------------*/
  738. /* Valeurs de réponse :aucune                                                 */
  739. /* Rques:il faut définir MAXITEMS, BuilDUpMenu(),struct Menu Menus,           */
  740. /* struct MenuItem Items,struct IntuiText Texts,char *IString...              */
  741. /* dans le prg                                                                */
  742. /*                                                                            */
  743. /******************************************************************************/
  744.  
  745. VOID BuildUpMenu()
  746. {
  747.     long i;
  748.  
  749.     Items[0].LeftEdge=1;                        /* Item 1 */
  750.     Items[0].TopEdge=0;
  751.     Items[0].Width=120; Items[0].Height=10;
  752.     Items[0].Flags=ITEMTEXT|ITEMENABLED|HIGHNONE;
  753.     Items[0].MutualExclude=NULL;
  754.     Items[0].ItemFill=(APTR)&Texts[0];
  755.     Items[0].SelectFill=NULL;
  756.     Items[0].Command=NULL;
  757.     Items[0].SubItem=NULL;
  758.     Items[0].NextSelect=NULL;
  759.  
  760.     Texts[0].FrontPen=3; Texts[0].BackPen=1;
  761.     Texts[0].DrawMode=JAM1;
  762.     Texts[0].LeftEdge=1; Texts[0].TopEdge=1;
  763.     Texts[0].ITextFont=NULL;
  764.     Texts[0].IText=IString[0];
  765.     Texts[0].NextText=NULL;
  766.  
  767.     Items[1].LeftEdge=1;                        /* Item 2 */
  768.     Items[1].TopEdge=10;
  769.     Items[1].Width=120; Items[1].Height=10;
  770.     Items[1].Flags=ITEMTEXT|ITEMENABLED|HIGHCOMP;
  771.     Items[1].MutualExclude=NULL;
  772.     Items[1].ItemFill=(APTR)&Texts[1];
  773.     Items[1].SelectFill=NULL;
  774.     Items[1].Command=NULL;
  775.     Items[1].SubItem=&SubItem[0];
  776.     Items[1].NextSelect=NULL;
  777.  
  778.     Texts[1].FrontPen=3; Texts[1].BackPen=1;
  779.     Texts[1].DrawMode=JAM1;
  780.     Texts[1].LeftEdge=1; Texts[1].TopEdge=1;
  781.     Texts[1].ITextFont=NULL;
  782.     Texts[1].IText=IString[1];
  783.     Texts[1].NextText=NULL;
  784.  
  785.     Items[2].LeftEdge=1;                        /* Item 3 */
  786.     Items[2].TopEdge=20;
  787.     Items[2].Width=120; Items[2].Height=10;
  788.     Items[2].Flags=ITEMTEXT|ITEMENABLED|HIGHCOMP;
  789.     Items[2].MutualExclude=NULL;
  790.     Items[2].ItemFill=(APTR)&Texts[2];
  791.     Items[2].SelectFill=NULL;
  792.     Items[2].Command=NULL;
  793.     Items[2].SubItem=&SubItem[1];
  794.     Items[2].NextSelect=NULL;
  795.  
  796.     Texts[2].FrontPen=3; Texts[2].BackPen=1;
  797.     Texts[2].DrawMode=JAM1;
  798.     Texts[2].LeftEdge=1; Texts[2].TopEdge=1;
  799.     Texts[2].ITextFont=NULL;
  800.     Texts[2].IText=IString[2];
  801.     Texts[2].NextText=NULL;
  802.  
  803.     Items[3].LeftEdge=1;                        /* Item 4 */
  804.     Items[3].TopEdge=30;
  805.     Items[3].Width=120; Items[3].Height=10;
  806.     Items[3].Flags=ITEMTEXT;
  807.     Items[3].MutualExclude=NULL;
  808.     Items[3].ItemFill=(APTR)&Texts[3];
  809.     Items[3].SelectFill=NULL;
  810.     Items[3].Command=NULL;
  811.     Items[3].SubItem=NULL;
  812.     Items[3].NextSelect=NULL;
  813.  
  814.     Texts[3].FrontPen=3; Texts[3].BackPen=1;
  815.     Texts[3].DrawMode=JAM1;
  816.     Texts[3].LeftEdge=1; Texts[3].TopEdge=1;
  817.     Texts[3].ITextFont=NULL;
  818.     Texts[3].IText=IString[3];
  819.     Texts[3].NextText=NULL;
  820.  
  821.     Items[4].LeftEdge=1;                        /* Item 5 */
  822.     Items[4].TopEdge=40;
  823.     Items[4].Width=120; Items[4].Height=10;
  824.     Items[4].Flags=ITEMTEXT|ITEMENABLED|HIGHBOX;
  825.     Items[4].MutualExclude=NULL;
  826.     Items[4].ItemFill=(APTR)&Texts[4];
  827.     Items[4].SelectFill=NULL;
  828.     Items[4].Command=NULL;
  829.     Items[4].SubItem=&SubItem[2];
  830.     Items[4].NextSelect=NULL;
  831.  
  832.     Texts[4].FrontPen=3; Texts[4].BackPen=1;
  833.     Texts[4].DrawMode=JAM1;
  834.     Texts[4].LeftEdge=1; Texts[4].TopEdge=1;
  835.     Texts[4].ITextFont=NULL;
  836.     Texts[4].IText=IString[4];
  837.     Texts[4].NextText=NULL;
  838.  
  839.     SubItem[0].NextItem=NULL;
  840.     SubItem[0].LeftEdge=120;                    /* SubItem 1 */
  841.     SubItem[0].TopEdge=0;
  842.     SubItem[0].Width=200; SubItem[0].Height=10;
  843.     SubItem[0].Flags=ITEMTEXT|ITEMENABLED|HIGHNONE;
  844.     SubItem[0].MutualExclude=NULL;
  845.     SubItem[0].ItemFill=(APTR)&SubTexts[0];
  846.     SubItem[0].SelectFill=NULL;
  847.     SubItem[0].Command=NULL;
  848.     SubItem[0].SubItem=NULL;
  849.     SubItem[0].NextSelect=NULL;
  850.  
  851.     SubTexts[0].FrontPen=3; SubTexts[0].BackPen=1;
  852.     SubTexts[0].DrawMode=JAM1;
  853.     SubTexts[0].LeftEdge=1; SubTexts[0].TopEdge=1;
  854.     SubTexts[0].ITextFont=NULL;
  855.     SubTexts[0].IText=IString[8];
  856.     SubTexts[0].NextText=NULL;
  857.  
  858.     SubItem[1].NextItem=NULL;
  859.     SubItem[1].LeftEdge=120;                    /* SubItem 2 */
  860.     SubItem[1].TopEdge=0;
  861.     SubItem[1].Width=256; SubItem[1].Height=30;
  862.     SubItem[1].Flags=ITEMENABLED|HIGHCOMP;
  863.     SubItem[1].MutualExclude=NULL;
  864.     SubItem[1].ItemFill=(APTR)&ImageSignature;
  865.     SubItem[1].SelectFill=NULL;
  866.     SubItem[1].Command=NULL;
  867.     SubItem[1].SubItem=NULL;
  868.     SubItem[1].NextSelect=NULL;
  869.  
  870.     SubItem[2].NextItem=&SubItem[3];
  871.     SubItem[2].LeftEdge=120;                    /* SubItem 3 */
  872.     SubItem[2].TopEdge=0;
  873.     SubItem[2].Width=44; SubItem[2].Height=10;
  874.     SubItem[2].Flags=ITEMTEXT|ITEMENABLED|HIGHCOMP;
  875.     SubItem[2].MutualExclude=NULL;
  876.     SubItem[2].ItemFill=(APTR)&SubTexts[2];
  877.     SubItem[2].SelectFill=NULL;
  878.     SubItem[2].Command=NULL;
  879.     SubItem[2].SubItem=NULL;
  880.     SubItem[2].NextSelect=NULL;
  881.  
  882.     SubTexts[2].FrontPen=3; SubTexts[2].BackPen=1;
  883.     SubTexts[2].DrawMode=JAM1;
  884.     SubTexts[2].LeftEdge=1; SubTexts[2].TopEdge=1;
  885.     SubTexts[2].ITextFont=NULL;
  886.     SubTexts[2].IText=IString[6];
  887.     SubTexts[2].NextText=NULL;
  888.  
  889.     SubItem[3].NextItem=NULL;
  890.     SubItem[3].LeftEdge=120;                    /* SubItem 4 */
  891.     SubItem[3].TopEdge=10;
  892.     SubItem[3].Width=44; SubItem[3].Height=10;
  893.     SubItem[3].Flags=ITEMTEXT|ITEMENABLED|HIGHCOMP;
  894.     SubItem[3].MutualExclude=NULL;
  895.     SubItem[3].ItemFill=(APTR)&SubTexts[3];
  896.     SubItem[3].SelectFill=NULL;
  897.     SubItem[3].Command=NULL;
  898.     SubItem[3].SubItem=NULL;
  899.     SubItem[3].NextSelect=NULL;
  900.  
  901.     SubTexts[3].FrontPen=3; SubTexts[3].BackPen=1;
  902.     SubTexts[3].DrawMode=JAM1;
  903.     SubTexts[3].LeftEdge=1; SubTexts[3].TopEdge=1;
  904.     SubTexts[3].ITextFont=NULL;
  905.     SubTexts[3].IText=IString[7];
  906.     SubTexts[3].NextText=NULL;
  907.  
  908.     for(i=0;i<MAXITEMS-1;i++)
  909.         Items[i].NextItem=&Items[i+1];
  910.     Items[MAXITEMS-1].NextItem=NULL;
  911.  
  912.     Menus.NextMenu=NULL;
  913.     Menus.LeftEdge=0; Menus.TopEdge=0;
  914.     Menus.Width=63;   Menus.Height=10;
  915.     Menus.Flags=MENUENABLED;
  916.     Menus.MenuName="Projets";
  917.     Menus.FirstItem=&Items[0];
  918. }
  919.  
  920. /******************************************************************************/
  921. /*                                                                            */
  922. /* Cette routine compte et modifie le menu                                    */
  923. /*                                                                            */
  924. /*----------------------------------------------------------------------------*/
  925. /* Parametres en entrée :aucun                                                */
  926. /*----------------------------------------------------------------------------*/
  927. /* Valeurs de réponse :aucune                                                 */
  928. /*                                                                            */
  929. /******************************************************************************/
  930.  
  931. VOID Compte()
  932. {
  933.     char *p;
  934.     register i;
  935.  
  936.     coup++;
  937.     if(coup==10000)coup=0;
  938.     p=stpcpy(Texts[0].IText,"COUP N° ");
  939.     stci_d(ascoup,coup);
  940.     for(i=0;i<4-strlen(ascoup);++i)
  941.                         p=stpcpy(p," ");
  942.     p=stpcpy(p,ascoup);
  943. }
  944.  
  945. /******************************************************************************/
  946. /*                                                                            */
  947. /* Cette fonction initialise le tableau de jeu et toute le variables          */
  948. /*                                                                            */
  949. /*----------------------------------------------------------------------------*/
  950. /* Parametres en entrée :aucun                                                */
  951. /*----------------------------------------------------------------------------*/
  952. /* Valeurs de réponse :aucune                                                 */
  953. /*                                                                            */
  954. /******************************************************************************/
  955.  
  956. VOID Reset()
  957. {
  958.         char *p;
  959.  
  960.         TableauJeu[1][1]=TableauJeu[1][2]=1;
  961.         TableauJeu[1][3]=TableauJeu[1][4]=2;
  962.         TableauJeu[1][5]=6;
  963.  
  964.         TableauJeu[2][1]=TableauJeu[2][2]=0;
  965.         TableauJeu[2][3]=5;
  966.         TableauJeu[2][4]=7;
  967.         TableauJeu[2][5]=10;
  968.  
  969.         TableauJeu[3][1]=TableauJeu[3][2]=0;
  970.         TableauJeu[3][3]=5;
  971.         TableauJeu[3][4]=8;
  972.         TableauJeu[3][5]=10;
  973.  
  974.         TableauJeu[4][1]=TableauJeu[4][2]=3;
  975.         TableauJeu[4][3]=TableauJeu[4][4]=4;
  976.         TableauJeu[4][5]=9;
  977.  
  978.         TabPiece[0][0]=2;
  979.         TabPiece[0][1]=TabPiece[1][0]=TabPiece[1][1]=TabPiece[2][0]=1;
  980.         TabPiece[2][1]=3;
  981.         TabPiece[3][0]=4;
  982.         TabPiece[3][1]=1;
  983.         TabPiece[4][0]=4;
  984.         TabPiece[4][1]=3;
  985.         TabPiece[5][0]=2;
  986.         TabPiece[5][1]=3;
  987.         TabPiece[6][0]=1;
  988.         TabPiece[6][1]=5;
  989.         TabPiece[7][0]=2;
  990.         TabPiece[7][1]=4;
  991.         TabPiece[8][0]=3;
  992.         TabPiece[8][1]=4;
  993.         TabPiece[9][0]=4;
  994.         TabPiece[9][1]=5;
  995.         DeplN=DeplS=DeplO=DeplS=im=0;
  996.         Etat=-1;
  997.  
  998.         coup=0;
  999.         p=stpcpy(Texts[0].IText,"COUP N°    0");
  1000.         Dessin();
  1001. }
  1002.